import numpy as np
import pandas as pd[문제 풀이] 데이터프레임 : 특정 열의 재가공
Quiz
문제
주어진 자료에서 입학년도를 추가하고 싶다면 어떻게 해야 할까?
1. 사전작업
- 라이브러리 설치
- 자료 받아오기 및 확인
np.random.seed(43052)
att = np.random.choice(np.arange(10,21)*5,20)
rep = np.random.choice(np.arange(5,21)*5,20)
mid = np.random.choice(np.arange(0,21)*5,20)
fin = np.random.choice(np.arange(0,21)*5,20)
student_id = [ '2023-12362', '2022-12471', '2023-12333', '2022-12400', '2022-12377',
'2022-12469', '2023-12314', '2022-12363', '2023-12445', '2023-12336',
'2023-12426', '2022-12380', '2023-12422', '2022-12488', '2022-12370',
'2023-12443', '2022-12463', '2023-12491', '2023-12340', '2022-12312' ]
df = pd.DataFrame({'student_id':student_id,'att':att,'rep':rep,'mid':mid,'fin':fin})
df.head()| student_id | att | rep | mid | fin | |
|---|---|---|---|---|---|
| 0 | 2023-12362 | 65 | 55 | 50 | 40 |
| 1 | 2022-12471 | 95 | 100 | 50 | 80 |
| 2 | 2023-12333 | 65 | 90 | 60 | 30 |
| 3 | 2022-12400 | 55 | 80 | 75 | 80 |
| 4 | 2022-12377 | 80 | 30 | 30 | 100 |
학번(
student_id)에서 앞 네자리에 해당하는 숫자를 빼내어 새로운 열로 저장하면 좋을 것 같다.
2. 가공
- 아래의 코드는
student_id열을'-'를 기준으로 앞뒤로 나누고 첫번째 것을 취한다. 숫자형으로 바꾼 뒤, 리스트로 산출한다.
[int(i.split('-')[0]) for i in df.student_id][2023,
2022,
2023,
2022,
2022,
2022,
2023,
2022,
2023,
2023,
2023,
2022,
2023,
2022,
2022,
2023,
2022,
2023,
2023,
2022]
lambda를 이용해 가공할 수도 있다.
list(map((lambda x : int(x.split('-')[0])), df.student_id))[2023,
2022,
2023,
2022,
2022,
2022,
2023,
2022,
2023,
2023,
2023,
2022,
2023,
2022,
2022,
2023,
2022,
2023,
2023,
2022]
첫번째 코드와 똑같은 결과를 산출한다.
3. 출력
- 상기의 코드를
df에 새로운 열year에 삽입한다.
df.assign(year = [int(i.split('-')[0]) for i in df.student_id])| student_id | att | rep | mid | fin | year | |
|---|---|---|---|---|---|---|
| 0 | 2023-12362 | 65 | 55 | 50 | 40 | 2023 |
| 1 | 2022-12471 | 95 | 100 | 50 | 80 | 2022 |
| 2 | 2023-12333 | 65 | 90 | 60 | 30 | 2023 |
| 3 | 2022-12400 | 55 | 80 | 75 | 80 | 2022 |
| 4 | 2022-12377 | 80 | 30 | 30 | 100 | 2022 |
| 5 | 2022-12469 | 75 | 40 | 100 | 15 | 2022 |
| 6 | 2023-12314 | 65 | 45 | 45 | 90 | 2023 |
| 7 | 2022-12363 | 60 | 60 | 25 | 0 | 2022 |
| 8 | 2023-12445 | 95 | 65 | 20 | 10 | 2023 |
| 9 | 2023-12336 | 90 | 80 | 80 | 20 | 2023 |
| 10 | 2023-12426 | 55 | 75 | 35 | 25 | 2023 |
| 11 | 2022-12380 | 95 | 95 | 45 | 0 | 2022 |
| 12 | 2023-12422 | 95 | 55 | 15 | 35 | 2023 |
| 13 | 2022-12488 | 50 | 80 | 40 | 30 | 2022 |
| 14 | 2022-12370 | 50 | 55 | 15 | 85 | 2022 |
| 15 | 2023-12443 | 95 | 30 | 30 | 95 | 2023 |
| 16 | 2022-12463 | 50 | 50 | 45 | 10 | 2022 |
| 17 | 2023-12491 | 65 | 55 | 15 | 45 | 2023 |
| 18 | 2023-12340 | 70 | 70 | 40 | 35 | 2023 |
| 19 | 2022-12312 | 90 | 90 | 80 | 90 | 2022 |
완료
-감사합니다-